package com.anivia.common.core.util;

import java.util.Collections;
import java.util.List;

import static java.util.stream.Collectors.toList;

/**
 * 对象拷贝工具类
 *
 * @author wangj
 */
public final class BeanUtil {
    /**
     * 复制属性
     *
     * @param source           被拷贝的对象
     * @param target           目标对象
     * @param ignoreProperties 要忽略的字段
     */
    public static void copyProperties(final Object source, final Object target, String... ignoreProperties) {
        if (source != null) {
            cn.hutool.core.bean.BeanUtil.copyProperties(source, target, ignoreProperties);
        }
    }

    /**
     * 复制字段创建一个新的对象
     *
     * @param source           被拷贝的对象
     * @param clazz            要生成的新的对象
     * @param ignoreProperties 要忽略的字段
     * @return {@link T }
     */
    public static <T> T newBean(final Object source, final Class<T> clazz, String... ignoreProperties) {
        if (source == null) {
            return null;
        }
        return cn.hutool.core.bean.BeanUtil.copyProperties(source, clazz, ignoreProperties);
    }

    /**
     * 复制字段创建一个新的对象
     *
     * @param source 被拷贝的集合
     * @param clazz  要生成的新的集合元素
     * @return {@link List<V> }
     */
    public static <E, V> List<V> copyListToList(List<E> source, Class<V> clazz) {
        if (source == null || source.size() == 0) {
            return Collections.emptyList();
        }
        return source.stream().map(pojo -> newBean(pojo, clazz)).collect(toList());
    }
}
